package br.edu.univas.si.lab3.bankmanager.controller;

import br.edu.univas.si.lab3.bankmanager.listeners.ListarListener;

import br.edu.univas.si.lab3.bankmanager.model.ClienteFisicoTO;
import br.edu.univas.si.lab3.bankmanager.model.ClienteJuridicoTO;
import br.edu.univas.si.lab3.bankmanager.model.ClienteTO;
import br.edu.univas.si.lab3.bankmanager.model.ContaCorrenteTO;
import br.edu.univas.si.lab3.bankmanager.model.ContaTO;
import br.edu.univas.si.lab3.bankmanager.model.DAO;
import br.edu.univas.si.lab3.bankmanager.model.DAOException;
import br.edu.univas.si.lab3.bankmanager.view.FrameBusca;
import br.edu.univas.si.lab3.bankmanager.view.FrameListar;

public class ControllerListar {
	
	private DAO dao;
	private FrameBusca busca;
	private ClienteTO cliente;
	private FrameListar listar;
	private Integer modificador;
	private ContaTO conta;

	public ControllerListar(DAO dao) {
		this.dao = dao;
	}

	public void listarContatos(ClienteTO cliente) {
		this.cliente = cliente;
		Integer modificador = 3;
		busca = new FrameBusca(this.cliente,modificador);
		busca.addlistarListeners(new ListarListener() {
			@Override	
			public void listarCliente(String chave) throws DAOException{
				listar(chave);
			
			}
			@Override
			public void listarCancelado(){
				busca.dispose();
			}
			@Override
			public void listarOK() {}
		});
		busca.setVisible(true);
	}
	
	
	public void listar(String chave) throws DAOException{
		
		Boolean ClienteExiste = dao.buscaCliente(chave);
		if(ClienteExiste) {
			if(chave.length() == 14){
				ClienteFisicoTO cf = new ClienteFisicoTO();
				this.cliente = cf;
			}
			else if(chave.length() == 18){
				ClienteJuridicoTO cj = new ClienteJuridicoTO();
				this.cliente = cj;
			}
			ClienteTO clienteInfo = dao.getClienteInfo(chave,this.cliente);
			ContaCorrenteTO contaAux = new ContaCorrenteTO();
			this.conta = contaAux;
			this.modificador = 1;
			ContaTO conta = dao.getContaInfoByChave(this.conta,chave);
			listar = new FrameListar(clienteInfo,conta,modificador);
			listar.addListarListeners(new ListarListener() {
				
				@Override
				public void listarOK() {
					listar.dispose();
				}
				
				@Override
				public void listarCliente(String chave) {}
				
				@Override
				public void listarCancelado() {}
			});
			listar.setVisible(true);
		}
		busca.dispose();
	}
	
}
	
